import "./i18n/index"
import { Main } from "pack-antv-x6";
// import { reactive } from "vue";
// import {initNodeList} from "./util"
//

import useSelection from "./plugins/useSelect"
import Box from "./components/box/box"
import useCells from "./cells"
import useControlService from "./module/controlService"
import useParameters from "./module/parameters"
import useProvenance from "./module/provenance"
import useFlow from "./plugins/useFlow";
import useGroup from "./plugins/useGroup";
import useQuene from "./module/quene"
import { IPackNifi } from "./inter";
import { ref } from "vue";
// import useNodeList from "./plugins/useNodeList";


export default class Nifi extends Main {
    constructor(config:IPackNifi.NifiConfig) {
        super(config.id);
        //
        const {id,api} = config;
        if(id){
            this.rootId = id;
            this.currentId.value = id;
        }
        if(api){
            this.api.init(api)
        }
    }
    box = new Box()
    // START 覆写的方法
    // 获取 抽屉中的元素
    // async getDrawerVNode(cell:Cell){return await this.cellApi.edit(cell)}
    // 右键菜单 动态获取右键菜单，当右键事件触发时，会调用此方法获取菜单 可以返回一个 VNode[] 对象
    // getContextmenuList = async (arg:{cell?:Cell,e:MouseEvent}) => { return this.cellApi.contextmenu(arg)}
    // END
    // 初始 处理组 id
    rootId = ''
    currentId = ref('')
    // 当前流的数据 数据在 useGraph 中初始化 clientId,processorTypes,controllerServiceTypes,reportingTaskTypes,parameterProviderTypes,prioritizerTypes,parameterContexts
    flow = useFlow(this)
    // flow = { disconnectedNodeAcknowledged: false, clientId: "", processorTypes: [], controllerServiceTypes: [], reportingTaskTypes: [], parameterProviderTypes: [], prioritizerTypes: [], parameterContexts: [],copyCells:{} }
    // 当前处理组原始数据 在 useGraph 中初始化  图数据保存在 flow 属性中
    // group: Record<string, any> & { id: string, flow: any, breadcrumb: Record<string,{id:string,name:string,next?:string,prev?:string}>,breadcrumbIds:string[] } = { id: "", flow: undefined, breadcrumb: {},breadcrumbIds:[] }
    group = useGroup(this)
    // 原始的元素数据
    cells = useCells(this);
    // getCellData(cell: IPackNifi.SC) {
    //     const id = typeof cell == 'string' ? cell : cell.id;
    //     return this.cells.get(id);
    // }
    // delCellData(cell: IPackNifi.SC) {
    //     const id = typeof cell == 'string' ? cell : cell.id;
    //     this.cells.delete(id)
    //     return this;
    // }
    // addCellData(data: any) {
    //     this.cells.set(data.id, data);
    //     return this;
    // }
    //
    // nodelist 中定义的 metadata 需要对 nodelist 进行
    // nodeMetadata = new Map<string, IPackNifi.NodeMetadata>()
    // 自定义的元素数据 在 processors 文件夹 中定义
    // cellMetadata = new Map<string, IPackNifi.CellMeatadata>()
    // getCellMetadata(t: Cell | string) {
    //     const type = (typeof t == 'string' && /\./.test(t)) ? t : this.getCellData(t)?.component.type;
    //     return this.cellMetadata.get(type)
    // }
    // cellapi
    // cellApi = useCells(this);
    // // 动态响应的元素数据 如状态 label 等数据
    // celldata = reactive(new Map<string,any>())

    // 刷新单个节点的元素响应数据
    // refreshCelldata(){}
    // refreshCell(cell:IPackNifi.SC,data:any = {},options:any = {}){
    //     if(!this.graph) return;
    //     const e = typeof cell == 'string' ? this.graph.getCellById(cell) : cell;
    //     if(!e) return;
    //     e.prop(data,options)
    //     return this;
    // }

    // 元素选择 可以获取已选的元素，并可以清除所有选择的元素
    Select = useSelection(this);
    // 图渲染与初始化
    // Graph = useGraph(this);
    // initGraphData = this.Graph.initGraphData;
    //
    // 控制器服务
    ControlService = useControlService(this);
    // 参数模块
    Parameters = useParameters(this)
    //
    Provenance = useProvenance(this)
    //
    Quene = useQuene(this)
    // L = useNodeList(this);
    
}